home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
051-060
/
amok57
/
borders
/
borders.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
4KB
|
114 lines
(**********************************************************************
:Program. Borders.mod
:Contents. support of "3D-design" rectangle borders
:Author. Nicolas Benezan [bne]
:Address. Postwiesenstr. 2, D7000 Stuttgart 60
:Phone. 711/333679
:Author. Kai Bolay [kai]
:Copyright. (c) 1990 by Nicolas Benezan. All rights reserved.
:Language. Oberon
:Translator. Amiga Oberon Compiler V1.16 [fbs]
:History. V1.0 [bne] 03.Oct.1990
:History. v1.1 [kai] 15-Nov-90 (bugs fixed)
**********************************************************************)
MODULE Borders;
IMPORT e: Exec, i: Intuition, g: Graphics, s: SYSTEM;
TYPE
Angle = ARRAY 10 OF INTEGER;
Rect = ARRAY 16 OF INTEGER;
Border3D* = STRUCT
left* : i.Border;
right*: i.Border;
inner*: i.Border;
lAngle: Angle;
rAngle: Angle;
rect: Rect;
END;
Border3DPtr* = POINTER TO Border3D;
CONST
ThickX* = 4;
ThickY* = 2;
LeftAngle = Angle ( 0, 0, 0, -1, 1, -2, 1, 0, -2, 0);
RightAngle = Angle ( 1, -1, -2, -1, -2, 1, -1, 0, -1, -1);
Rectangle = Rect ( 2, 1, 2, -2, -3, -2, -3, 1, 3, 1,
3, -2, -4, -2, -4, 2);
PROCEDURE ResizeBorder* (VAR Border: Border3D;
Width, Height: INTEGER);
BEGIN
Border.lAngle:= LeftAngle;
Border.rAngle:= RightAngle;
Border.rect := Rectangle;
INC (Border.lAngle[8], Width);
INC (Border.lAngle[3], Height);
INC (Border.lAngle[5], Height);
INC (Border.rAngle[2], Width);
INC (Border.rAngle[4], Width);
INC (Border.rAngle[6], Width);
INC (Border.rAngle[8], Width);
INC (Border.rAngle[1], Height);
INC (Border.rAngle[3], Height);
INC (Border.rAngle[9], Height);
INC (Border.rect[4] , Width);
INC (Border.rect[6] , Width);
INC (Border.rect[12], Width);
INC (Border.rect[14], Width);
INC (Border.rect[3] , Height);
INC (Border.rect[5] , Height);
INC (Border.rect[11], Height);
INC (Border.rect[13], Height);
END ResizeBorder;
PROCEDURE MoveBorder* (VAR Border: Border3D;
OffsetX, OffsetY: INTEGER);
BEGIN
Border.left.leftEdge := OffsetX;
Border.left.topEdge := OffsetY;
Border.right.leftEdge:= OffsetX;
Border.right.topEdge := OffsetY;
Border.inner.leftEdge:= OffsetX;
Border.inner.topEdge := OffsetY;
END MoveBorder;
PROCEDURE InitBorder* (VAR Border: Border3D;
LTPen, RBPen, BackFill: SHORTINT;
Width, Height: INTEGER): i.BorderPtr;
BEGIN
Border.left. leftEdge := 0;
Border.right.leftEdge:= 0;
Border.inner.leftEdge:= 0;
Border.left. topEdge := 0;
Border.right.topEdge:= 0;
Border.inner.topEdge:= 0;
Border.left. drawMode := g.jam1;
Border.right.drawMode:= g.jam1;
Border.inner.drawMode:= g.jam1;
Border.left. frontPen := LTPen;
Border.right.frontPen:= RBPen;
Border.inner.frontPen:= BackFill;
Border.left.backPen := 0;
Border.right.backPen:= 0;
Border.inner.backPen:= 0;
Border.left.count := 5;
Border.right.count := 5;
Border.inner.count := 8;
Border.left.xy := s.ADR (Border.lAngle);
Border.right.xy := s.ADR (Border.rAngle);
Border.inner.xy := s.ADR (Border.rect);
Border.right.nextBorder:= s.ADR (Border.inner);
Border.left.nextBorder:= s.ADR (Border.right);
Border.inner.nextBorder := NIL;
ResizeBorder (Border, Width, Height);
RETURN s.ADR (Border)
END InitBorder;
END Borders.